/**
 * @file demo8.c
 * @author WRS (1352509846@qq.com)
 * @brief 字符串转换整数
 * 实现一个myAtoi（string s）函数，使其能将字符串转换成一个32位有符号数
 * - 读入字符串并丢弃无用的前导符号
 * - 检查下一个字符（假设还未到字符末尾）为正还是负号，读取该符号确定最终结构是正数还是负数
 * @version 0.1
 * @date 2021-10-03
 * 
 * @copyright Copyright (c) 2021
 * 
 */

#include <stdio.h>
#include <limits.h>
#include <ctype.h>
#include <string.h>

int myAtoi(char * s)
{
    int res = 0;
    int i = 0;
    int flag = 1;

    while(s[i] == ' ')
    {
        i++;
    }

    if(s[i] == '-')
    {
        flag = -1;
    }
    if(s[i] == '+' || s[i] == '-')
    {
        i++;    
    }
    while(i<strlen(s)&&isdigit(s[i]))
    {
        int r = s[i] - '0';
        if(res>INT_MAX/10 || (res == INT_MAX/10 && r>7))
        {
            return flag > 0 ? INT_MAX : INT_MIN;
        }
        res = res * 10 + r;
        i++;
    }
    return flag > 0 ? res : -res;
}

int main(int argc, char const *argv[])
{
    char s[20]={0};
    printf("请输入一个字符串：");
    scanf("%s",s);
    printf("%d %s\n",strlen(s),s);

    printf("%d\n",myAtoi(s));
    return 0;
}

